package classes;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.LayoutStyle.ComponentPlacement;

public class ConsultaJTable extends JFrame {

	private JPanel contentPane;
	private JTable tbCliente;
	private JButton btnConsultar;
	private DefaultTableModel modelo;
	private JScrollPane scrollPane;
	private JButton btnExcluir;
	private JButton btnAtualizar;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ConsultaJTable frame = new ConsultaJTable();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ConsultaJTable() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 720, 350);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addComponent(getScrollPane(), GroupLayout.DEFAULT_SIZE, 682, Short.MAX_VALUE)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addComponent(getBtnConsultar())
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(getBtnExcluir())
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(getBtnAtualizar())))
					.addContainerGap())
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addComponent(getScrollPane(), GroupLayout.PREFERRED_SIZE, 234, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(getBtnConsultar())
						.addComponent(getBtnExcluir())
						.addComponent(getBtnAtualizar()))
					.addContainerGap(27, Short.MAX_VALUE))
		);
		contentPane.setLayout(gl_contentPane);
	}

	private JTable getTbCliente() {
		if (tbCliente == null) {
			tbCliente = new JTable();
			tbCliente.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
			tbCliente.setModel(new DefaultTableModel(
				new Object[][] {
				},
				new String[] {
					"ID", "Nome", "Endere\u00E7o", "CEP", "Telefone", "UF", "Site", "Email", "CNPJ/CPF", "Oberva\u00E7\u00E3o"
				}
			));
			modelo = (DefaultTableModel) tbCliente.getModel();
		}
		return tbCliente;
	}

	private JButton getBtnConsultar() {
		if (btnConsultar == null) {
			btnConsultar = new JButton("Consultar");
			btnConsultar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {

					ManipulaClientes mc = new ManipulaClientes();

					ArrayList<Cliente> clientes = new ArrayList<>();

					mc.pesquisar(clientes);

					if (modelo.getRowCount() > 0){
						
						while (modelo.getRowCount() != 0){
							
							modelo.removeRow(0);
							
						}
					}
					
					for (Cliente cliente : clientes) {

						modelo.addRow(new String[] {
								String.valueOf(cliente.getId()),
								cliente.getNome(), 
								cliente.getEndereco(),
								cliente.getCep(), 
								cliente.getTelefone(), 
								cliente.getUf(),
								cliente.getSite(),
								cliente.getEmail(), 
								cliente.getCpf(),
								cliente.getObservacao() 
								//"ID", "Nome", "Endere\u00E7o", "CEP", "Telefone", "UF", "Site", "Email", "CNPJ/CPF", "Oberva\u00E7\u00E3o"
								});
					}

				}
			});

		}
		return btnConsultar;
	}
	private JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setViewportView(getTbCliente());
		}
		return scrollPane;
	}
	private JButton getBtnExcluir() {
		if (btnExcluir == null) {
			btnExcluir = new JButton("Excluir Linha");
			btnExcluir.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					//int linhaSelecionada = tbCliente.getSelectedRow();
					
					int linhas[] = tbCliente.getSelectedRows();
					
					for (int i = 0; i < linhas.length; i++) {
						
						ManipulaClientes mc = new ManipulaClientes();
						
						int id =  Integer.parseInt(modelo.getValueAt(linhas[i], 0).toString());
						
						mc.excluiCliente(id);
					}
					
					
					
					//ManipulaClientes mc = new ManipulaClientes();
					
					//mc.excluiCliente(id);
					
					btnConsultar.doClick();
					
					
					
				}
			});
		}
		return btnExcluir;
	}
	private JButton getBtnAtualizar() {
		if (btnAtualizar == null) {
			btnAtualizar = new JButton("Atualizar");
			btnAtualizar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
									
					int linhas[] = tbCliente.getSelectedRows();
					
						
					for (int i = 0; i < linhas.length; i++) {
						
						ManipulaClientes mc = new ManipulaClientes();
						
						int col = 0;
						Cliente cliente = new Cliente();
						
							cliente.setId(Integer.parseInt(modelo.getValueAt(linhas[i], col++).toString()));

						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setNome(modelo.getValueAt(linhas[i], col++).toString()); 
						else
							cliente.setNome("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setEndereco(modelo.getValueAt(linhas[i], col++).toString()); 
						else
							cliente.setEndereco("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setCep(modelo.getValueAt(linhas[i], col++).toString()); 
						else
							cliente.setCep("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setTelefone(modelo.getValueAt(linhas[i], col++).toString());
						else
							cliente.setTelefone("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setUf(modelo.getValueAt(linhas[i], col++).toString()); 
						else
							cliente.setUf("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setSite(modelo.getValueAt(linhas[i], col++).toString()); 
						else
							cliente.setSite("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setEmail(modelo.getValueAt(linhas[i], col++).toString()); 
						else
							cliente.setEmail("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setCpf(modelo.getValueAt(linhas[i], col++).toString());
						else
							cliente.setCpf("");
						if (modelo.getValueAt(linhas[i], col) != null)
							cliente.setObservacao(modelo.getValueAt(linhas[i], col++).toString());
						else
							cliente.setObservacao("");
						
						mc.atualizadaCliente(cliente);
					}
					
					btnConsultar.doClick();
				}
			});
		}
		return btnAtualizar;
	}
}
